import { instance } from "../axios";

/**
 * 获取用户信息
 * @returns {Promise} - 返回用户信息
 */
export const getUserInfo = () => {
  // 获取本地存储的用户ID
  const userId = localStorage.getItem('id');
  const username = localStorage.getItem('username');
  const email = localStorage.getItem('email');
  
  // 使用balance接口获取用户数据
  return instance.get('/usercenter/balance').then(response => {
    // 构造用户信息对象
    const userData = {
      status: "success",
      data: {
        id: userId,
        username: username || "用户" + userId,
        email: email || "user" + userId + "@example.com",
        avatar: "/default-avatar.png",
        createdAt: new Date().toISOString(),
        nickname: username || "用户" + userId,
        // 添加默认的用户统计数据
        upload: "0 B",
        download: "0 B",
        ratio: "0",
        score: 0,
        yangtao: 0,
        level: 1
      }
    };
    
    // 如果balance接口返回了数据，合并到用户信息中
    if (response && response.data) {
      // 更新积分(score)为balance值
      userData.data.score = response.data.balance || 0;
      
      // 如果返回了其他统计数据，也合并到用户信息中
      if (response.data.upload) userData.data.upload = response.data.upload;
      if (response.data.download) userData.data.download = response.data.download;
      if (response.data.ratio) userData.data.ratio = response.data.ratio;
      if (response.data.yangtao) userData.data.yangtao = response.data.yangtao;
      if (response.data.level) userData.data.level = response.data.level;
    }
    
    return userData;
  }).catch(error => {
    console.error('获取余额失败:', error);
    // 构造用户信息对象（不含余额）
    return {
      status: "success",
      data: {
        id: userId,
        username: username || "用户" + userId,
        email: email || "user" + userId + "@example.com",
        avatar: "/default-avatar.png",
        createdAt: new Date().toISOString(),
        nickname: username || "用户" + userId,
        balance: 0,
        upload: "0 B",
        download: "0 B",
        ratio: "0",
        score: 0,
        yangtao: 0,
        level: 1
      }
    };
  });
};

/**
 * 修改用户资料（昵称、邮箱等）
 * @param {Object} data - 用户数据，包含id和username (作为昵称)
 * @returns {Promise} - 返回修改结果
 */
export const updateUserProfile = (data) => {
  // 将nickname转换为username，因为后端接受的是username
  const userId = data.id;
  const username = data.nickname; // 使用nickname的值作为username发送
  
  console.log(`Sending profile update with userId: ${userId}, username: ${username}`);
  
  // 使用POST请求和RequestParam参数
  // 根据后端代码，需要使用URLSearchParams来发送RequestParam参数
  const params = new URLSearchParams();
  params.append('id', userId);
  params.append('username', username);
  
  return instance.post('/usercenter/username', params, {
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded'
    }
  });
};

/**
 * 修改密码
 * @param {Object} data - 包含邮箱、验证码、旧密码和新密码的对象
 * @returns {Promise} - 返回修改结果
 */
export const changePassword = (data) => {
  return instance.post('/usercenter/new-password', null, {
    params: data
  });
};

/**
 * 发送密码重置验证码
 * @param {string} email - 邮箱
 * @returns {Promise} - 返回发送结果
 */
export const sendPasswordResetCode = (email) => {
  return instance.post('/usercenter/password-forgot-code', { email });
};

/**
 * 生成邀请码
 * @returns {Promise} - 返回生成的邀请码
 */
export const generateInviteCode = () => {
  return instance.post('/usercenter/generate-invite-code');
};

/**
 * 获取我的邀请码
 * @param {string} type - 邀请码类型 (all/valid/used)
 * @returns {Promise} - 返回邀请码列表
 */
export const getMyInviteCodes = (type = 'all') => {
  return instance.get(`/usercenter/my-invite-codes?type=${type}`);
};

/**
 * 签到
 * @returns {Promise} - 返回签到结果
 */
export const checkIn = () => {
  return instance.post('/usercenter/checkin');
};

/**
 * 获取签到状态
 * @returns {Promise} - 返回签到状态
 */
export const getCheckInStatus = () => {
  return instance.get('/usercenter/checkin/status');
};

/**
 * 获取账户余额
 * @returns {Promise} - 返回账户余额
 */
export const getBalance = () => {
  return instance.get('/usercenter/balance');
};

/**
 * 上传用户头像
 * @param {FormData} formData - 包含头像文件的表单数据
 * @returns {Promise} - 返回上传结果
 */
export const uploadUserAvatar = (formData) => {
  return instance.post('/user/avatar', formData, {
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  });
};

/**
 * 获取用户数据统计（上传量、下载量、分享率、积分、杨桃）
 * @param {number} userId - 用户ID
 * @returns {Promise} - 返回用户数据统计
 */
export const getUserStats = (userId) => {
  return instance.get('/user/stats', { params: { userId } });
};

/**
 * 获取用户记录（上传记录、下载记录等）
 * @param {number} userId - 用户ID
 * @param {string} type - 记录类型（upload/download）
 * @returns {Promise} - 返回用户记录
 */
export const getUserRecords = (userId, type) => {
  return instance.get('/user/records', { params: { userId, type } });
};

/**
 * 获取用户关注列表
 * @param {number} userId - 用户ID
 * @returns {Promise} - 返回用户关注列表
 */
export const getUserFollowing = (userId) => {
  return instance.get('/usercenter/following', { params: { userId } });
};

/**
 * 获取用户粉丝列表
 * @param {number} userId - 用户ID
 * @returns {Promise} - 返回用户粉丝列表
 */
export const getUserFollowers = (userId) => {
  return instance.get('/usercenter/followers', { params: { userId } });
};

/**
 * 关注/取消关注用户
 * @param {number} targetUserId - 目标用户ID
 * @param {string} action - 操作类型（follow/unfollow）
 * @returns {Promise} - 返回操作结果center
 */
export const toggleFollowUser = (userId, targetUserId, action) => {
  return instance.post('/usercenter/follow', {userId, targetUserId, action });
};

/**
 * 获取上传历史
 * @param {number} userId - 用户ID，如果不提供则使用本地存储的ID
 * @returns {Promise} - 返回上传历史
 */
export const getUploadHistory = (userId) => {
  if (!userId) {
    userId = parseInt(localStorage.getItem('id'), 10);
    if (isNaN(userId)) {
      console.error('无效的用户ID:', localStorage.getItem('id'));
      return Promise.reject(new Error('无效的用户ID'));
    }
  }
  
  console.log('获取上传历史，用户ID:', userId);
  return instance.get('/usercenter/uploads', { 
    params: { 
      userId
    } 
  });
};

/**
 * 获取下载历史
 * @param {number} userId - 用户ID，如果不提供则使用本地存储的ID
 * @returns {Promise} - 返回下载历史
 */
export const getDownloadHistory = (userId) => {
  if (!userId) {
    userId = parseInt(localStorage.getItem('id'), 10);
    if (isNaN(userId)) {
      console.error('无效的用户ID:', localStorage.getItem('id'));
      return Promise.reject(new Error('无效的用户ID'));
    }
  }
  
  console.log('获取下载历史，用户ID:', userId);
  return instance.get('/usercenter/downloads', { 
    params: { 
      userId
    } 
  });
};